/**
 * 消息队列 生产者-消费者模型
 *  1.Message 消息体
 *  2.MessageQueue 消息队列
 *  3.Handler 发送消息、处理消息
 *  4.Looper 循环取消息
 */

#include "Handler.h"

Handler::Handler() : Handler(nullptr) {

}

Handler::Handler(IHandlerCallback *pCallback)
    : _pLooper(new Looper()), _pCallback(pCallback) {
  _pMsgQueue = _pLooper->getMessageQueue();
}

Handler::~Handler() noexcept {
  DELETE_PTR(_pLooper)
}

bool Handler::sendMessage(int32_t what) {
  auto pMsg = Msg_Create(what);
  return sendMessage(pMsg);
}

bool Handler::sendMessage(Message *pMsg) {
  if (!pMsg) return false;

  pMsg->pHandler = this;
  if (_pMsgQueue) {
    return _pMsgQueue->enqueueMessage(pMsg);
  }

  return false;
}

void Handler::dispatchMessage(Message *pMsg) {
  if (_pCallback) {
    _pCallback->handleMessage(pMsg);
  } else {
    handleMessage(pMsg);
  }
}

void Handler::loop() {
  if (_pLooper)
    _pLooper->loop();
}

void Handler::handleMessage(Message *pMsg) {

}